#ifndef CHEQUESMODULE_H
#define CHEQUESMODULE_H

#include <QMainWindow>
#include <QSqlDatabase>
#include <QSqlRelationalTableModel>
#include <QTableView>
#include <QAction>
#include <QDebug>
#include <QHeaderView>
#include <QMessageBox>
#include <QGridLayout>
#include <QGroupBox>
#include <QFormLayout>
#include <QColor>
#include <QRadioButton>
#include <QPainter>
#include <QKeyEvent>
#include <QKeySequence>
#include <QShortcut>

#include "CustomToolbar.h"
#include "AltaCheque.h"
#include "ModificacionCheque.h"
#include "CobrarCheque.h"
#include "ABMPersona.h"
#include "ABMConcepto.h"
#include "MovimientosModule.h"

class ChequesModule : public QMainWindow
{
    Q_OBJECT

public:
    explicit ChequesModule(QWidget *parent = 0);

signals:

public slots:
    void AltaChequesBtn();
    void BajaChequesBtn();
    void ModificarChequesBtn();
    void CobrarChequeBtn();
    void UpdateChequesListBtn();
    void ABMPersonaBtn();
    void ABMConceptoBtn();
    void ControlVencimientos();
    //
//    void UpdateMovimientosList();
//    void CorrectViewOfModelMov();
//    void CalcularSaldoMensual();
    //
    void RecibidosHoy();
    void RecibidosMesPasado();
    void RecibidosMesCorriente();
    void RecibidosAnioPasado();
    void RecibidosAnioCorriente();

    void EncontrarPersona();
    void FiltroPersona();
    void EncontrarConcepto();
    void FiltroConcepto();
    void EncontrarFechaRecibido();
    void FiltroFechaRecibido();
    void EncontrarFechaCobro();
    void FiltroFechaCobro();

private:
    CustomModulesToolbar *cheques_toolbar;

    QAction *accion_altaCheques;
    QAction *accion_bajaCheques;
    QAction *accion_modificacionCheques;
    QAction *accion_cobrarCheques;
    QAction *accion_updateChequesList;
    QAction *accion_abmPersona;
    QAction *accion_abmConcepto;

    QFormLayout *form_cheques;

    QRadioButton *recibidos_hoy;
    QRadioButton *recibidos_mesPasado;
    QRadioButton *recibidos_mesCorriente;
    QRadioButton *recibidos_anioPasado;
    QRadioButton *recibidos_anioCorriente;

    QRadioButton *encontrar_persona;
    QRadioButton *encontrar_concepto;
    QRadioButton *encontrar_fechaRecibido;
    QRadioButton *encontrar_fechaCobro;

    QLineEdit *campoBusqueda;
    QString filtroCheques;

    void AltaChequesToolBar();
    void BajaChequesToolBar();
    void ModificarChequesToolBar();
    void CobrarChequeToolBar();
    void UpdateChequesListToolBar();
    void CorrectViewOfModel();
    void ABMPersonaToolBar();
    void ABMConceptoToolBar();

};

class ChequeSqlTableModel : public QSqlRelationalTableModel
{
    Q_OBJECT
public:
    ChequeSqlTableModel(QObject * parent = 0, QSqlDatabase db = QSqlDatabase())
        : QSqlRelationalTableModel(parent,db) {;}
    QVariant data (const QModelIndex & index, int role = Qt::DisplayRole) const
    {
        if(role == Qt::BackgroundColorRole)
        {
            if (index.column() != 8) {
                QModelIndex index2 = index.model()->index(index.row(), 8, index.parent()); // get index of "watched" column
                if (index2.data(Qt::DisplayRole).toString() == "SI") {
                        return QVariant(QColor(Qt::darkGreen));
                }
            }
            else {
                const QVariant value(data(index,Qt::DisplayRole));
                if (value.toString() == "SI") {
                   return QVariant(QColor(Qt::darkGreen));
                }
            }
        }

        if(role == Qt::ForegroundRole)
        {
            if (index.column() != 8) {
                QModelIndex index2 = index.model()->index(index.row(), 8, index.parent()); // get index of "watched" column
                if (index2.data(Qt::DisplayRole).toString() == "SI") {
                        return QVariant(QColor(Qt::white));
                }
            }
            else {
                const QVariant value(data(index,Qt::DisplayRole));
                if (value.toString() == "SI") {
                   return QVariant(QColor(Qt::white));
                }
            }
        }

        if (role == Qt::TextAlignmentRole) {
            int col = index.column();
            if (col == 0 || col == 1 || col == 3 || col == 4) {
                return QVariant (Qt::AlignVCenter | Qt::AlignHCenter);
            }
            if (col == 7) {
                return QVariant (Qt::AlignVCenter | Qt::AlignRight);
            }
        }

        if (role == Qt::FontRole) {
            int col = index.column();
            if (col == 7)
                return QVariant (QFont("Helvetica58-Condensed",13,13));
            else
                return QVariant (QFont("Helvetica58-Condensed"));
        }

        return QSqlRelationalTableModel::data(index,role);
    }
};

#endif // CHEQUESMODULE_H
